package com.health.platform.common.utils.token.impl;

import com.alibaba.fastjson.JSONObject;
import com.health.platform.common.sys.login.entity.UserEntity;
import com.health.platform.common.utils.RedisUtil;
import com.health.platform.common.utils.ThreadLocalUtil;
import com.health.platform.common.utils.token.ITokenValidate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;

import javax.servlet.http.HttpServletRequest;

/**
 * <p>token校验器</p>
 * <p>创建日期：2021-02-08</p>
 *
 * @author zhou-qf
 */
@Component
public class TokenValidate implements ITokenValidate {

    @Autowired
    private RedisUtil redisUtil;

    /**
     * 校验方法
     * @param request 请求
     * @return 校验结果
     */
    @Override
    public boolean validate(HttpServletRequest request) {
        // 从请求头中获取token
        String token = request.getHeader("Authorization");
        // 包含请求头
        if(!ObjectUtils.isEmpty(token)){
            // 从缓存中获取用户登录信息
            Object obj = redisUtil.get(token);
            if(obj == null){
                return false;
            }
            UserEntity userEntity = JSONObject.parseObject(obj.toString(), UserEntity.class);
            // 用户登录信息不为空
            if(userEntity != null && !ObjectUtils.isEmpty(userEntity.getId())){
                // 设置线程变量信息
                ThreadLocalUtil.set(userEntity);
                // 校验成功
                return true;
            }
            // 校验失败
            else{
                return false;
            }
        }
        // 校验失败
        return false;
    }

    @Override
    public void release() {
        ThreadLocalUtil.remove();
    }
}
